<?php


namespace api\channel\jutuike;


use app\common\service\around\JtkAroundService;
use app\model\CouponOrder;

/**
 * 聚推客周边游文档地址
 * https://apifox.com/apidoc/shared-e65162d9-4fd7-49eb-a3a5-105c0e4f115f/doc-1828539
 */
class AroundUnion extends Union
{

    protected $tuikeyunBaseUrl = 'http://openapi.tuikeyun.com';
    protected $appId = '10000027'; // 应用id 聚推客提供


    //初始化
    public function __construct()
    {
        parent::__construct(PRODUCT_AROUND_SHOP_SERV);
    }




    /**
     * 产品转化链接
     */
    public function jumpAround($args)
    {

        $sid = $this->getSid($args['agent_id'], $args['user_id'], $args['channel_id'] ?? '');

        $url = $this->baseUrl . '/llzby/act';


        $defaults = [
            'sid' => $sid,
            'mobile' => @$args['mobile']
        ];

        $data = [
            'apikey' => $this->apikey,
        ];

        $data = handleParameters($data, $defaults, $args);

        $res = curlPost($url, $data);
        $res = json_decode($res, true);

        return $res['data'] ?? [];
    }

    /**
     * 聚推客curl请求接口
     * @param $params
     * @param $requestMethod
     * 返回值说明
     * 参数名	必选	 类型	说明
     *  code	是	 int	状态码0 失败 1成功
     *  msg	    是	 string	成功失败信息
     *  data	是	 array	调用成功接口返回的数据
     * @return mixed
     */
    public function curlPostResult($params, $requestMethod) {
        $params['app_id'] = $this->appId;
        $params['time'] = time();
        $url = $this->tuikeyunBaseUrl . $requestMethod;
        // 签名
        ksort($params);
        $sign = urldecode(http_build_query($params));
        $sign = $sign . '&apisecret='. $this->apikey;
        $params['sign'] = md5($sign);
        $res = curlPost($url, $params);
        $res = json_decode($res, true);
        return $res;
    }

    /**
     * 聚推客-获取所有站点信息接口
     * @return array|mixed
     */
    public function getLocationList() {
        $params = [];
        $res = $this->curlPostResult($params, '/llzby/getLocationList');
        return $res;
    }

    /**
     * 获取站点下的分类信息
     * @return array|mixed
     */
    public function queryProductCategory($params) {
        $res = $this->curlPostResult($params, '/llzby/queryProductCategory');
        return $res;
    }

    /**
     * 商品列表
     * @param $params
     * @return array|mixed
     */
    public function queryProductList($params) {
        $res = $this->curlPostResult($params, '/llzby/queryProductList');
        return $res;
    }

    /**
     * 获取商品基本信息接口
     * $productParams = [
        'itemId' => $params['itemId'],
        'productId' => $params['productId'],
        'locationId' => $params['locationId'],
       ];
     * @return array|mixed
     */
    public function queryProductByCondition($params) {
        $itemId = $params['itemId'] ?? '';
        $productId = $params['productId'] ?? '';
        if (empty($itemId) && empty($productId)) {
            return [
                'code' => JtkAroundService::CODE_FAIL,
                'msg' => '产品id和套餐id不能同时为空',
                'data' => []
            ];
        }
        $res = $this->curlPostResult($params, '/llzby/queryProductByCondition');
        return $res;
    }

    /**
     * 商品图文详情v1
     * 查询产品图文详情(文案)
     * @param $params
     * @return array|mixed
     */
    public function productDetailV1($params) {
        $res = $this->curlPostResult($params, '/llzby/detailHtmlV1');
        return $res;
    }

    /**
     * 查询产品图文详情(文案)，
     * 建议使用文案小程序解析插件:jyf-parser 解析HTML
     * v2.0版本中提供购买须知、套餐内容、商家信息、产品有效日期字段，需要渠道对接方自行处理前端样式。
     * @param $params
     * @return mixed
     */
    public function productDetailV2($params) {
        $res = $this->curlPostResult($params, '/llzby/detailHtmlV2');
        return $res;
    }

    /**
     * 效验订单  注意价格单位为：分。
     *  1、校验即将要下单的商品，并返回价格等重要数据，注意价格单位为：分。
        2、只有校验成功才可进入下一步下单操作，校验成功后到下单不可超过10分钟时间，否则订单自动失效。
        3、建议接入方需在校验成功后存储本地为订单数据。
     * @param $params
     * @return mixed
     */
    public function checkCreateOrder($params) {
        $res = $this->curlPostResult($params, '/llzby/checkCreateOrder');
        return $res;
    }

    /**
     * 产品退款
     * 退款注意事项：
     * 1、只有在商品未核销、且未过期才可申请退款。
     * 2、目前只能全额退，不支持部分退款。
     * 3、部分商品不支持退款，不支持退款的类目如下：
     * @param $params
     * @return mixed
     */
    public function refundOrder($params) {
        $res = $this->curlPostResult($params, '/llzby/refundOrder');
        return $res;
    }

    /**
     * 创建订单  注意这个接口下单就直接扣钱啦！
     * 下单后不会立即返回订单二维码，而是通过回调地址返回
     * @param $params
     * @return void
     */
    public function createOrder($params) {

        // 订单回调地址
//        $notifyUrl =  env('app.api_url') . '/api/notify_v2/jutuikeAroundNotify/supplierId/' . $this->supplierInfo->id;
//        $notifyUrl =  env('app.api_url') . '/api/notify_v2/jutuikeAroundNotify/';
        $notifyUrl =  env('app.api_url_http') . '/api/notify_v2/jutuikeAroundNotify/';

        $params['notifyUrl'] = $notifyUrl;

        $res = $this->curlPostResult($params, '/llzby/createOrder');


        return $res;

    }



}